package com.kws.merchant.util;

import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.read.listener.ReadListener;
import lombok.var;
import org.springframework.web.multipart.MultipartFile;
 
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Objects;
 
public class ExcelUtil {
 
    /**
     * 读取 Excel 文件并返回数据模型列表。
     *
     * @param fileName Excel 文件的路径。
     * @param clazz    数据模型类。
     * @param <T>      数据模型的类型。
     * @return 数据模型列表。
     */
    public static <T> List<T> readExcel(String fileName, Class<T> clazz) {
        ExcelDataListener<T> listener = new ExcelDataListener<>();
        List<T> dataModels = new ArrayList<>();
 
        try {
            EasyExcel.read(fileName, clazz, listener).sheet().doRead();
            dataModels = listener.getDataModels();
        } catch (Exception e) {
            e.printStackTrace();
        }
 
        return dataModels;
    }
 
    /**
     * Excel 数据读取监听器。
     *
     * @param <T> 数据模型的类型。
     */
    public static class ExcelDataListener<T> implements ReadListener<T> {
        private List<T> dataModels = new ArrayList<>();
 
        @Override
        public void invoke(T dataModel, AnalysisContext context) {
            dataModels.add(dataModel);
        }
 
        @Override
        public void doAfterAllAnalysed(AnalysisContext context) {
            // 所有数据解析完成后的操作
        }
 
        public List<T> getDataModels() {
            return dataModels;
        }
    }

    public static String getPath() {
//        return FileUtil.class.getResource("/").getPath();
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
        return simpleDateFormat.format(new Date());
    }
 
    /**
     * 将 MultipartFile 转换为 File 对象。
     *
     * @param file MultipartFile 对象。
     * @return 转换后的 File 对象。
     * @throws IOException 如果文件写入失败。
     */
    public static File convert(MultipartFile file) throws IOException {
        if (!file.isEmpty()) {
            File convFile = new File(Objects.requireNonNull(file.getOriginalFilename()));
            try (var fos = new FileOutputStream(convFile)) {
                fos.write(file.getBytes());
            }
            return convFile;
        }
        throw new IOException("Could not convert the uploaded file.");
    }
 
}